// 重定向

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

static const char* filename = "log.txt";

// int main()
// {
//     close(1);
//     int fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0666);
//     if(fd < 0)
//     {
//         perror("open");
//         return errno;
//     }
//     printf("fd: %d\n", fd);     // printf函数底层实现在 1 号描述符，关闭1号描述符后，printf函数不起任何作用
//     const char* msg = "Hello world!\n";
//     int cnt = 5;
//     while (cnt--)
//     {
//         write(1, msg, strlen(msg));
//     }
    
//     close(fd);
//     return 0;
// }


// static const char* filename = "log.txt";
// int main()
// {
//     int fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0666);
//     if(fd < 0)
//     {
//         perror("open");
//         return errno;
//     }
//     dup2(fd, 1);
//     const char* msg = "Hello world!\n";
//     int cnt = 5;
//     while (cnt--)
//     {
//         write(1, msg, strlen(msg));
//     }
    
//     close(fd);
//     return 0;
// }


// int main()
// {
//     int fd = open(filename, O_RDONLY, 0666);
//     if(fd < 0)
//     {
//         perror("open");
//         return errno;
//     }
//     dup2(fd, 0);
//     char msg[1024];
//     ssize_t n = read(fd, msg, sizeof(msg));
//     if(n > 0)
//     {
//         msg[n] = 0;
//         printf("msg: %s", msg);
//     }
//     close(fd);
//     return 0;
// }


/// 标准输出和标准错误
int main()
{
    fprintf(stdout, "Hello output message\n");
    fprintf(stdout, "Hello output message\n");
    fprintf(stdout, "Hello output message\n");

    fprintf(stderr, "Hello error message\n");
    fprintf(stderr, "Hello error message\n");
    fprintf(stderr, "Hello error message\n");
    return 0;
}